import { segment } from "oicq";

export class QQInfoPlugin extends plugin {
    constructor() {
        super({
            name: '[SB]Findmenber',
            dsc: '查找和你某个人和你的共同群聊',
            event: 'message',
            priority: 114514,
            rule: [
                { reg: /^(#|\/)?qun$/, fnc: 'getGroupList' }, // 获取群列表
                { reg: /^(#|\/)?ren$/, fnc: 'getGroupMembers' }, // 获取群员列表
                { reg: /^(#|\/)?找QQ(\d+)$/, fnc: 'searchQQInGroups' }, // 查找QQ
                { reg: /^(#|\/)?hy$/, fnc: 'getFriendList' } // 获取好友列表
            ]
        });
    }

    // 获取群列表
    async getGroupList(e) {
        if (!e.isMaster) return false;
        try {
            const groupList = Array.from(this.e.bot.gl.values());
            const msg = [
                `群列表如下，共${groupList.length}个群：`,
                groupList.map((item, index) => {
                    const maskedGroupId = this.maskGroupId(item.group_id); // 处理群号
                    return `${index + 1}、${item.group_name}(${maskedGroupId})`;
                }).join("\n"),
            ].join("\n");

            e.reply(msg);
        } catch (error) {
            console.error('获取群列表时出错：', error);
            e.reply('获取群列表失败，请稍后再试。');
        }
    }

    // 获取群成员列表
    async getGroupMembers(e) {
        if (!e.isMaster) return false;
        if (!e.group) {
            return e.reply("此指令只能在群聊中使用。");
        }

        try {
            const memberList = await e.group.getMemberMap();
            const members = Array.from(memberList.values()).map(member => 
                `${member.nickname}（${member.user_id})`
            );

            e.reply(`群成员如下：\n${members.join("\n")}`);
        } catch (error) {
            console.error('获取群成员列表时出错：', error);
            e.reply('获取群成员列表失败，请稍后再试。');
        }
    }

    // 查找QQ
    async searchQQInGroups(e) {
        const match = e.msg.match(/找QQ\s*(\d{5,10})\s*/);
        if (!match) {
            return e.reply('请输入正确的指令格式：找QQ + QQ号', { at: true });
        }

        const qqNumber = match[1].trim(); // 确保去掉前后空格
        const groupList = Array.from(this.e.bot.gl.values());
        let foundGroups = [];

        // 遍历所有群聊
        for (const group of groupList) {
            try {
                const groupId = group.group_id;
                const groupObj = this.e.bot.pickGroup(groupId);
                const memberMap = await groupObj.getMemberMap();

                // 打印当前群聊的成员ID
                logger.warn(`群名: ${group.group_name}, 群ID: ${groupId}, 成员数量: ${memberMap.size}`);
                logger.warn(`当前成员: ${Array.from(memberMap.keys()).join(', ')}`); // 输出所有成员QQ号

                // 使用 Array.from 将 memberMap 转换为数组，检查是否包含 qqNumber
                const membersArray = Array.from(memberMap.keys());

                // 检查是否存在对应的 QQ 号
                if (membersArray.some(memberId => memberId.toString() === qqNumber)) {
                    foundGroups.push({
                        group_name: group.group_name,
                        group_id: group.group_id,
                    });
                }
            } catch (error) {
                logger.warn(`获取群${group.group_id}成员列表时出错：`, error);
            }
        }

        // 输出结果
        if (foundGroups.length > 0) {
            const groupInfo = foundGroups.map((group, index) => {
                const maskedGroupId = this.maskGroupId(group.group_id); // 处理群号
                return `${index + 1}、${group.group_name}(${maskedGroupId})`;
            }).join("\n");
            e.reply(`QQ号 ${qqNumber} 出现在以下群聊中：\n${groupInfo}`, { at: true });
        } else {
            e.reply(`未找到QQ号 ${qqNumber} 在任何群聊中。`, { at: true });
        }
    }


    // 获取好友列表
    async getFriendList(e) {
        if (!e.isMaster) return false;

        try {
            const friendList = await this.e.bot.getFriendList(); // 获取好友列表
            console.log('获取到的好友列表:', friendList); // 打印好友列表以调试

            // 将好友列表转换为转发消息格式
            let msgList = [];
            let forwardMessages = []; // 用于存储转发消息

            for (const [user_id, friend] of friendList) {
                const maskedUserId = this.maskUserId(friend.user_id); // 处理 QQ 号
                const msg = `昵称: ${friend.nickname}\n用户ID: ${maskedUserId}\n`;
                msgList.push({
                    user_id: friend.user_id,
                    message: msg,
                });

                // 每150条创建一次新的转发消息
                if (msgList.length === 150) {
                    let forwardMsg;
                    try {
                        forwardMsg = await e.group.makeForwardMsg(msgList);
                    } catch {
                        forwardMsg = await e.friend.makeForwardMsg(msgList);
                    }
                    forwardMessages.push(forwardMsg);
                    msgList = []; // 清空消息列表以准备下一个
                }
            }

            // 处理剩余的消息（如果有的话）
            if (msgList.length > 0) {
                let forwardMsg;
                try {
                    forwardMsg = await e.group.makeForwardMsg(msgList);
                } catch {
                    forwardMsg = await e.friend.makeForwardMsg(msgList);
                }
                forwardMessages.push(forwardMsg);
            }

            // 回复所有转发消息
            for (const forwardMsg of forwardMessages) {
                await e.reply(forwardMsg);
            }
        } catch (error) {
            console.error('获取好友列表时出错：', error);
            e.reply('获取好友列表失败，请稍后再试。');
        }
    }

    // 处理QQ号，隐藏3到6位
    maskUserId(userId) {
        const str = userId.toString();
        if (str.length < 7) return str; // 如果QQ号少于7位，返回原号
        return str.substring(0, 2) + '****' + str.substring(6);
    }


    // 处理群号，隐藏第3到第7位
    maskGroupId(groupId) {
        const str = groupId.toString();
        return str.substring(0, 2) + '*****' + str.substring(7);
    }
}
